#ifndef CMD_DEF_H
#define CMD_DEF_H
#ifdef __cplusplus
extern "C" {
#endif


// ================== 板卡 CAN 物理ID分配（11位地址） ==================
#define CANID_TEMP_SEND         0x000  // 温控板 发送
#define CANID_TEMP_RECV         0x400  // 温控板 接收

#define CANID_DRIVER1_SEND      0x010  // 功率驱动板1 发送
#define CANID_DRIVER1_RECV      0x410  // 功率驱动板1 接收

#define CANID_DRIVER2_SEND      0x020  // 功率驱动板2 发送
#define CANID_DRIVER2_RECV      0x420  // 功率驱动板2 接收

#define CANID_DRIVER3_SEND      0x030  // 功率驱动板3 发送
#define CANID_DRIVER3_RECV      0x430  // 功率驱动板3 接收

#define CANID_DRIVER4_SEND      0x040  // 功率驱动板4 发送
#define CANID_DRIVER4_RECV      0x440  // 功率驱动板4 接收

#define CANID_BACKLIGHT_SEND    0x050  // 背光驱动板 发送
#define CANID_BACKLIGHT_RECV    0x450  // 背光驱动板 接收

// 协议透传板（内部协议，11位地址高位区分）
#define CANID_PROTOCOL_SEND     0x000  // 11'b0XX_XXXX_XXXX
#define CANID_PROTOCOL_RECV     0x400  // 11'b1XX_XXXX_XXXX

// 液面探测板
#define CANID_LIQLEVEL1_SEND    0x0A1  // 液面探测板1 发送
#define CANID_LIQLEVEL1_RECV    0x4A1  // 液面探测板1 接收
#define CANID_LIQLEVEL2_SEND    0x0A2  // 液面探测板2 发送
#define CANID_LIQLEVEL2_RECV    0x4A2  // 液面探测板2 接收
#define CANID_LIQLEVEL3_SEND    0x0A3  // 液面探测板3 发送
#define CANID_LIQLEVEL3_RECV    0x4A3  // 液面探测板3 接收
#define CANID_LIQLEVEL4_SEND    0x0A4  // 液面探测板4 发送
#define CANID_LIQLEVEL4_RECV    0x4A4  // 液面探测板4 接收


// ================== 板卡/模块编号（应用协议 id值）分配 ==================
#define MODID_BD_TEMP           0x0000  // 温控板
#define MODID_REAGENT           0x0001  // 试剂洁净组件
#define MODID_STATUS            0x0002  // 照明状态组件

#define MODID_BD_DRIVER01       0x0010  // 功率驱动板1
#define MODID_ARM_LEFT          0x0011  // 左备液针组件
#define MODID_BD_DRIVER02       0x0020  // 功率驱动板2
#define MODID_ARM_RIGHT         0x0021  // 右备液针组件

#define MODID_BD_DRIVER03       0x0030  // 功率驱动板3
#define MODID_TABLE_LEFT        0x0031  // 左备液台组件
#define MODID_TABLE_RIGHT       0x0032  // 右备液台组件
#define MODID_PICTURE_LEFT      0x0033  // 左拍照组件
#define MODID_PICTURE_RIGHT     0x0034  // 右拍照组件
#define MODID_DISH_DISPATCH     0x0035  // 皿盘调度XZ抓手组件
#define MODID_DOOR_LEFT         0x0036  // 左废物仓门组件
#define MODID_DOOR_RIGHT        0x0037  // 右废物仓门组件

#define MODID_BD_DRIVER04       0x0040  // 功率驱动板4
#define MODID_DISH_SUPPLY       0x0041  // 皿盘上料组件
#define MODID_DISH_RECYCLE      0x0042  // 皿盘下料组件

#define MODID_LIGHT_ADJUST01    0x0051  // 相机背光驱动组件1
#define MODID_LIGHT_ADJUST02    0x0052  // 相机背光驱动组件2

// 内部协议
#define MODID_BD_PROTOCOL       0x0300  // 协议透传板
#define MODID_PARA_PROTOCOL     0x0301  // 协议透传参数配置

// 液面探测板
#define MODID_LIQUID_BOARD1     0x00A1  // 左滴液针液面探测
#define MODID_LIQUID_BOARD2     0x00A2  // 右滴液针液面探测
#define MODID_LIQUID_BOARD3     0x00A3  // 左盖油针液面探测
#define MODID_LIQUID_BOARD4     0x00A4  // 右盖油针液面探测













// ================== 公共状态维护命令 ==================
#define CMD_STA_GET_VERSION           0xF000  // 查询软件版本信息
#define CMD_STA_GET_FAL_PARAM         0xF001  // 读取板卡中的自定义参数
#define CMD_STA_SET_FAL_PARAM         0xF002  // 写入自定义参数到板卡中
#define CMD_STA_GET_DEBUG_STR         0xF003  // 查询字符串调试信息
#define CMD_STA_SAVE_PARAM_TO_FLASH   0xF010  // 保存参数到flash
#define CMD_STA_LOAD_PARAM_FROM_FLASH 0xF011  // 从flash加载参数
#define CMD_STA_APP_READY             0xF800  // 下位机主动返回，通知进入APP代码段

// ================== 公共动作执行命令 ==================
#define CMD_ACT_SOFT_RESET            0x0000  // 下位机板卡软复位
#define CMD_ACT_HANDSHAKE             0x0001  // 板卡握手
#define CMD_ACT_SET_LED               0x0002  // 设置板卡状态LED显示输出
#define CMD_ACT_JUMP_TO_BOOT          0x1000  // 跳入BOOT代码段并进入IAP模式

// ================== BOOT代码段命令 ==================
#define CMD_BOOT_ACT_SOFT_RESET       0x0000  // BOOT软复位
#define CMD_BOOT_ACT_HANDSHAKE        0x0001  // BOOT握手
#define CMD_BOOT_ACT_JUMP_TO_IAP      0x1000  // 进入IAP模式
#define CMD_BOOT_ACT_SEND_FW_DATA     0x1001  // 发送固件数据
#define CMD_BOOT_ACT_EXIT_IAP         0x1002  // 跳出IAP模式并进入APP
#define CMD_BOOT_STA_READY            0xF800  // 下位机主动返回，通知进入BOOT代码段




// ================== 传感器/光耦/门光栅/皿盘检测等扩展状态维护命令 ==================
#define CMD_STA_SENSOR_STATUS           0xFA00  // 查询传感器的状态值（3字节，详见协议说明）
#define CMD_STA_PHOTOCHANGE_REAGENT     0xFA01  // 检测到光耦变化（试剂瓶上料拍照有无检测），自动返回
#define CMD_STA_PHOTOCHANGE_TIP         0xFA02  // 检测到光耦变化（TIP盒有无检测），自动返回
#define CMD_STA_PHOTOCHANGE_L_DOOR      0xFA03  // 检测到光耦变化（左侧门光栅），自动返回
#define CMD_STA_PHOTOCHANGE_LF_DOOR     0xFA04  // 检测到光耦变化（左前门光栅），自动返回
#define CMD_STA_PHOTOCHANGE_R_DOOR      0xFA05  // 检测到光耦变化（右侧门光栅），自动返回
#define CMD_STA_PHOTOCHANGE_RF_DOOR     0xFA06  // 检测到光耦变化（右前门光栅），自动返回
#define CMD_STA_PHOTOCHANGE_MF_DOOR     0xFA07  // 检测到光耦变化（中前门光栅），自动返回
#define CMD_STA_PHOTOCHANGE_FEED_TOP    0xFA08  // 检测到光耦变化（上料前盖检测），自动返回
#define CMD_STA_PHOTOCHANGE_UNLOAD_TOP  0xFA09  // 检测到光耦变化（下料前盖检测），自动返回
#define CMD_STA_PHOTOCHANGE_PREP_TOP    0xFA0A  // 检测到光耦变化（备液前盖检测），自动返回
#define CMD_STA_PHOTOCHANGE_L_WASTE     0xFA0B  // 检测到光耦变化（左废物仓有无检测），自动返回
#define CMD_STA_PHOTOCHANGE_R_WASTE     0xFA0C  // 检测到光耦变化（右废物仓有无检测），自动返回

// ================== 功率驱动板4扩展状态维护命令 ==================
#define CMD_STA_POWER_SENSOR_STATUS     0xFA00  // 查询皿盘上/下料数量检测光耦等状态（3字节）
#define CMD_STA_POWER_PHOTOCHANGE_UP    0xFA01  // 上料区皿盘检测光耦变化，自动返回
#define CMD_STA_POWER_PHOTOCHANGE_DOWN  0xFA02  // 下料区皿盘检测光耦变化，自动返回

// ================== 协议透传板扩展状态维护命令 ==================
#define CMD_STA_TRANS_ERR_AUTO          0xFA00  // 自动返回报错信息

// ================== 试剂洁净组件扩展状态维护命令 ==================
#define CMD_STA_CLEAN_PARAM_CONFIG      0xF020  // 组件参数配置
#define CMD_STA_CLEAN_PARAM_QUERY       0xF021  // 组件参数查询

// ================== 试剂洁净组件扩展动作执行命令 ==================
#define CMD_ACT_FAN_CTRL                0x0000  // 散热风扇控制
#define CMD_ACT_PELTIER_CTRL            0x0001  // 帕尔贴控制
#define CMD_ACT_GET_TEMP                0x0010  // 获取传感器的温度值
#define CMD_ACT_SET_TARGET_TEMP         0x0011  // 设置目标温度值
#define CMD_ACT_SET_TIME                0x0020  // 设置当前系统时间值
#define CMD_ACT_GET_TIME                0x0021  // 查询当前系统时间值
#define CMD_ACT_SET_BOOT_TIME           0x0022  // 设置预约开机时间值
#define CMD_ACT_GET_BOOT_TIME           0x0023  // 查询预约开机时间值
#define CMD_ACT_CTRL_BOOT_ENABLE        0x0024  // 控制是否预约开机
#define CMD_ACT_FFU_CTRL                0x0030  // FFU风扇控制
#define CMD_ACT_GET_FFU_SPEED           0x0031  // 获取FFU当前转速值
#define CMD_ACT_GET_FFU_PRESSURE        0x0032  // 获取FFU的当前压差值
#define CMD_ACT_AUTO_TEMP_REPORT        0x0033  // 控制自动返回温度值
#define CMD_ACT_AUTO_PRESSURE_REPORT    0x0034  // 控制自动返回压差值
#define CMD_ACT_POWER_OFF_DELAY         0x0040  // 关上24V和12V程控电源
#define CMD_ACT_BUZZER_CTRL             0x0050  // 控制蜂鸣器
#define CMD_ACT_POWER_KEY               0x0080  // 检测到电源按键按下（自动返回）
#define CMD_ACT_PAUSE_KEY               0x0081  // 检测到暂停按键按下（自动返回）
#define CMD_ACT_EMERGENCY_KEY           0x0082  // 检测到急停按键按下（自动返回）

// ================== 状态照明组件扩展动作执行命令 ==================
#define CMD_ACT_LIGHT_CTRL              0x0000  // 照明灯控制
#define CMD_ACT_UV_CTRL                 0x0001  // 紫外灯控制
#define CMD_ACT_STATUS_LIGHT_CTRL       0x0002  // 状态灯控制
#define CMD_ACT_INDICATOR_CTRL          0x0003  // 指示灯控制




// ================== 备液针组件（左/右）状态维护命令 ==================
#define CMD_STA_LIQNEEDLE_MOTOR_CONFIG     0xF000  // 电机参数配置
#define CMD_STA_LIQNEEDLE_MOTOR_QUERY      0xF001  // 电机参数查询
#define CMD_STA_LIQNEEDLE_POS_QUERY        0xF002  // 查询电机的当前坐标值
#define CMD_STA_LIQNEEDLE_SENSOR_QUERY     0xF010  // 传感器状态查询
#define CMD_STA_LIQNEEDLE_PARAM_CONFIG     0xF020  // 组件参数配置
#define CMD_STA_LIQNEEDLE_PARAM_QUERY      0xF021  // 组件参数查询

// ================== 备液针组件（左/右）动作执行命令 ==================
#define CMD_ACT_LIQNEEDLE_MOTOR_HOME           0x0000  // 电机复位
#define CMD_ACT_LIQNEEDLE_MOTOR_MOVE_REL       0x0001  // 控制电机移动到相对位置
#define CMD_ACT_LIQNEEDLE_MOTOR_MOVE_ABS       0x0002  // 控制电机运动到绝对位置
#define CMD_ACT_LIQNEEDLE_MECH_HOME            0x0003  // 组件机械复位
#define CMD_ACT_LIQNEEDLE_XY_MOVE_REL          0x0004  // X、Y轴同时运动到相对位置
#define CMD_ACT_LIQNEEDLE_XY_MOVE_ABS          0x0005  // X、Y轴同时运动到绝对位置
#define CMD_ACT_LIQNEEDLE_ASP_DISPENSE         0x0006  // 滴液针吸、排液
#define CMD_ACT_LIQNEEDLE_OIL_ASP_DISPENSE     0x0007  // 盖油针吸、排液
#define CMD_ACT_LIQNEEDLE_ALLZ_HOME            0x0008  // 备液针的3个Z轴一起复位
#define CMD_ACT_LIQNEEDLE_XY_HOME              0x0009  // 备液针X、Y轴同时复位
#define CMD_ACT_LIQNEEDLE_Z_TOP                0x000A  // 针组件的Z轴控制到顶部
#define CMD_ACT_LIQNEEDLE_PUMP_VALVE_CTRL      0x0010  // 泵/阀控制
#define CMD_ACT_LIQNEEDLE_GET_PRESSURE         0x0011  // 获取开盖管路的压差值
#define CMD_ACT_LIQNEEDLE_TIP_LOAD             0x0020  // 滴液针装载吸头
#define CMD_ACT_LIQNEEDLE_TIP_UNLOAD           0x0021  // 滴液针卸载吸头
#define CMD_ACT_LIQNEEDLE_OIL_TIP_LOAD         0x0022  // 盖油针装载吸头
#define CMD_ACT_LIQNEEDLE_OIL_TIP_UNLOAD       0x0023  // 盖油针卸载吸头
#define CMD_ACT_LIQNEEDLE_COVER_PICK           0x0024  // 开盖臂吸取皿盖
#define CMD_ACT_LIQNEEDLE_COVER_PLACE          0x0025  // 开盖臂放下皿盖
#define CMD_ACT_LIQNEEDLE_ASP_REAGENT          0x0030  // 滴液针到试剂耗材区吸液
#define CMD_ACT_LIQNEEDLE_DISP_WORK            0x0031  // 滴液针到备液工作区备液
#define CMD_ACT_LIQNEEDLE_OIL_ASP_REAGENT      0x0032  // 盖油针到试剂耗材区吸液
#define CMD_ACT_LIQNEEDLE_OIL_DISP_WORK        0x0033  // 盖油针到备液工作区盖油
#define CMD_ACT_LIQNEEDLE_LIQLEVEL_DETECT      0x0040  // 滴液针液面探测
#define CMD_ACT_LIQNEEDLE_OIL_LIQLEVEL_DETECT  0x0041  // 盖油针液面探测



// ================== 备液台组件（左/右）状态维护命令 ==================
#define CMD_STA_LIQTABLE_MOTOR_CONFIG     0xF000  // 电机参数配置
#define CMD_STA_LIQTABLE_MOTOR_QUERY      0xF001  // 电机参数查询
#define CMD_STA_LIQTABLE_POS_QUERY        0xF002  // 查询电机的当前坐标值
#define CMD_STA_LIQTABLE_SENSOR_QUERY     0xF010  // 传感器状态查询
#define CMD_STA_LIQTABLE_PARAM_CONFIG     0xF020  // 组件参数配置
#define CMD_STA_LIQTABLE_PARAM_QUERY      0xF021  // 组件参数查询

// ================== 备液台组件（左/右）动作执行命令 ==================
#define CMD_ACT_LIQTABLE_MOTOR_HOME       0x0000  // 电机复位
#define CMD_ACT_LIQTABLE_MOTOR_MOVE_REL   0x0001  // 控制电机移动到相对位置
#define CMD_ACT_LIQTABLE_MOTOR_MOVE_ABS   0x0002  // 控制电机运动到绝对位置
#define CMD_ACT_LIQTABLE_MECH_HOME        0x0003  // 组件机械复位
#define CMD_ACT_LIQTABLE_MOVE_TO_POS      0x0010  // 备液台移动到指定位置
#define CMD_ACT_LIQTABLE_SWING            0x0020  // 控制备液台摇摆


// ================== 拍照组件（左/右）状态维护命令 ==================
#define CMD_STA_PHOTO_MOTOR_CONFIG      0xF000  // 电机参数配置
#define CMD_STA_PHOTO_MOTOR_QUERY       0xF001  // 电机参数查询
#define CMD_STA_PHOTO_POS_QUERY         0xF002  // 查询电机的当前坐标值
#define CMD_STA_PHOTO_SENSOR_QUERY      0xF010  // 传感器状态查询
#define CMD_STA_PHOTO_PARAM_CONFIG      0xF020  // 组件参数配置
#define CMD_STA_PHOTO_PARAM_QUERY       0xF021  // 组件参数查询

// ================== 拍照组件（左/右）动作执行命令 ==================
#define CMD_ACT_PHOTO_MOTOR_HOME        0x0000  // 电机复位
#define CMD_ACT_PHOTO_MOTOR_MOVE_REL    0x0001  // 控制电机移动到相对位置
#define CMD_ACT_PHOTO_MOTOR_MOVE_ABS    0x0002  // 控制电机运动到绝对位置
#define CMD_ACT_PHOTO_MECH_HOME         0x0003  // 组件机械复位
#define CMD_ACT_PHOTO_MOVE_TO_POS       0x0010  // 摄像头移动到指定位置




// ================== 皿盘调度XZ抓手组件状态维护命令 ==================
#define CMD_STA_XZGRAB_MOTOR_CONFIG      0xF000  // 电机参数配置
#define CMD_STA_XZGRAB_MOTOR_QUERY       0xF001  // 电机参数查询
#define CMD_STA_XZGRAB_POS_QUERY         0xF002  // 查询电机的当前坐标值
#define CMD_STA_XZGRAB_SENSOR_QUERY      0xF010  // 传感器状态查询
#define CMD_STA_XZGRAB_PARAM_CONFIG      0xF020  // 组件参数配置
#define CMD_STA_XZGRAB_PARAM_QUERY       0xF021  // 组件参数查询

// ================== 皿盘调度XZ抓手组件动作执行命令 ==================
#define CMD_ACT_XZGRAB_MOTOR_HOME        0x0000  // 电机复位
#define CMD_ACT_XZGRAB_MOTOR_MOVE_REL    0x0001  // 控制电机移动到相对位置
#define CMD_ACT_XZGRAB_MOTOR_MOVE_ABS    0x0002  // 控制电机运动到绝对位置
#define CMD_ACT_XZGRAB_MECH_HOME         0x0003  // 组件机械复位
#define CMD_ACT_XZGRAB_CLAW_CTRL         0x0010  // 电爪控制
#define CMD_ACT_XZGRAB_PICK_AT           0x0020  // 到指定位置抓取皿盘
#define CMD_ACT_XZGRAB_PLACE_AT          0x0021  // 到指定位置释放皿盘
#define CMD_ACT_XZGRAB_PICK_AND_PLACE    0x0022  // 到指定位置抓取皿盘并放到指定位置
#define CMD_ACT_XZGRAB_X_MOVE_TO         0x0023  // 调度抓手X轴到指定位置



// ================== 废物仓门组件（左/右）状态维护命令 ==================
#define CMD_STA_WASTEDOOR_MOTOR_CONFIG     0xF000  // 电机参数配置
#define CMD_STA_WASTEDOOR_MOTOR_QUERY      0xF001  // 电机参数查询
#define CMD_STA_WASTEDOOR_POS_QUERY        0xF002  // 查询电机的当前坐标值
#define CMD_STA_WASTEDOOR_SENSOR_QUERY     0xF010  // 传感器状态查询
#define CMD_STA_WASTEDOOR_PARAM_CONFIG     0xF020  // 组件参数配置
#define CMD_STA_WASTEDOOR_PARAM_QUERY      0xF021  // 组件参数查询

// ================== 废物仓门组件（左/右）动作执行命令 ==================
#define CMD_ACT_WASTEDOOR_MOTOR_HOME       0x0000  // 电机复位
#define CMD_ACT_WASTEDOOR_MOTOR_MOVE_REL   0x0001  // 控制电机移动到相对位置
#define CMD_ACT_WASTEDOOR_MOTOR_MOVE_ABS   0x0002  // 控制电机运动到绝对位置
#define CMD_ACT_WASTEDOOR_MECH_HOME        0x0003  // 组件机械复位
#define CMD_ACT_WASTEDOOR_MOVE_TO_POS      0x0010  // 废物仓门移动到指定位置




// ================== 皿盘上/下料组件状态维护命令 ==================
#define CMD_STA_PLATEMAG_MOTOR_CONFIG     0xF000  // 电机参数配置
#define CMD_STA_PLATEMAG_MOTOR_QUERY      0xF001  // 电机参数查询
#define CMD_STA_PLATEMAG_POS_QUERY        0xF002  // 查询电机的当前坐标值
#define CMD_STA_PLATEMAG_SENSOR_QUERY     0xF010  // 传感器状态查询
#define CMD_STA_PLATEMAG_PARAM_CONFIG     0xF020  // 组件参数配置
#define CMD_STA_PLATEMAG_PARAM_QUERY      0xF021  // 组件参数查询

// ================== 皿盘上/下料组件动作执行命令 ==================
#define CMD_ACT_PLATEMAG_MOTOR_HOME         0x0000  // 电机复位
#define CMD_ACT_PLATEMAG_MOTOR_MOVE_REL     0x0001  // 控制电机移动到相对位置
#define CMD_ACT_PLATEMAG_MOTOR_MOVE_ABS     0x0002  // 控制电机运动到绝对位置
#define CMD_ACT_PLATEMAG_MECH_HOME          0x0003  // 组件机械复位
#define CMD_ACT_PLATEMAG_SPLIT_CTRL         0x0010  // 上料分盘电机1/2同时控制
#define CMD_ACT_PLATEMAG_Z_CTRL             0x0012  // Z轴电机控制
#define CMD_ACT_PLATEMAG_Y_MOVE_TO          0x0013  // Y轴移动到指定位置
#define CMD_ACT_PLATEMAG_RELEASE_PLATE      0x0020  // 释放一个皿盘
#define CMD_ACT_PLATEMAG_SUPPORT_PLATE      0x0021  // 撑起一个皿盘
#define CMD_ACT_PLATEMAG_GET_COUNT          0x0022  // 读取皿盘个数


// ================== 相机背光驱动板1 动作执行命令 ==================
#define CMD_ACT_CAMBACKLIGHT_CTRL      0x0000  // 摄像头的背光控制


// ================== 液面探测组件（左/右滴液、左/右盖油）状态维护命令 ==================
#define CMD_STA_LIQLEVEL_GET_VERSION        0xF000  // 查询软件版本信息
#define CMD_STA_LIQLEVEL_SAVE_PARAM         0xF010  // 保存参数到flash中
#define CMD_STA_LIQLEVEL_LOAD_PARAM         0xF011  // 从flash中加载参数
#define CMD_STA_LIQLEVEL_PARAM_CONFIG       0xF020  // 组件参数配置
#define CMD_STA_LIQLEVEL_PARAM_QUERY        0xF021  // 组件参数查询
#define CMD_STA_LIQLEVEL_PARAM_QUICK_SET    0xF030  // 快速设置探测参数值（脚本端使用）

// ================== 液面探测组件（左/右滴液、左/右盖油）动作执行命令 ==================
#define CMD_ACT_LIQLEVEL_GET_PHOTOCOUPLER   0x0000  // 读取板卡的光耦状态值
#define CMD_ACT_LIQLEVEL_GET_CAP_SENSOR     0x0010  // 读取板卡的电容传感器
#define CMD_ACT_LIQLEVEL_GET_PRESS_SENSOR   0x0011  // 读取板卡的压力传感器
#define CMD_ACT_LIQLEVEL_START_DETECT       0x0020  // 启动液面探测功能

#ifdef __cplusplus
}
#endif
#endif // CMD_DEF_H